/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.yournamehere.client.vistas;


import com.google.gwt.core.client.GWT;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.ListGridFieldType;
import com.smartgwt.client.widgets.IButton;

import com.smartgwt.client.widgets.Window;
import java.util.List;


import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.layout.VLayout;

import com.smartgwt.client.widgets.toolbar.ToolStrip;
import com.smartgwt.client.widgets.toolbar.ToolStripButton;
import org.yournamehere.client.services.AdminRPC;
import org.yournamehere.client.services.AdminRPCAsync;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.docs.Grip;
import com.smartgwt.client.widgets.events.CloseClickHandler;
import com.smartgwt.client.widgets.events.CloseClientEvent;
import com.smartgwt.client.widgets.layout.Layout;
import org.yournamehere.client.dto.ClienteDTO;
import org.yournamehere.client.registrosgrid.GridRegistroCliente;

import com.smartgwt.client.widgets.form.DynamicForm;  
import com.smartgwt.client.widgets.form.fields.*;  
import com.smartgwt.client.widgets.IButton;  
import com.smartgwt.client.widgets.layout.VLayout; 
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.form.validator.RegExpValidator;



/**
 *
 * @author alberto
 */
public class VistaCliente extends VLayout{
    
    ToolStripButton nuevoButton;
    ToolStripButton editarButton;
    ToolStripButton borrarButton;
    ToolStrip menuGridToolStrip;
    GridRegistroCliente[] records;
    private final ListGridField[] listaCampos;
    final Window winModal=new Window();
    final ListGrid clientesGrid = new ListGrid(); 
    
    VLayout _this = new VLayout();
    

    public VistaCliente() {
        _this= this;
        // Se crea el menu Nuevo, Editar, Borrar
              
        
        
        final IButton nuevoButton = new IButton("Nuevo");  
        nuevoButton.setAutoFit(true);  
        nuevoButton.setIcon("/TP-PW-war/icons/add.png");        
        nuevoButton.addClickHandler(new ClickHandler() {  
            public void onClick(ClickEvent event) {
                //NuevoCliente nuevoCliente = new NuevoCliente();
                
                winModal.setWidth(300);  
                winModal.setHeight(600);  
                winModal.setTitle("Nuevo Cliente");  
                winModal.setShowMinimizeButton(false);  
                winModal.setIsModal(true);  
                winModal.setShowModalMask(true);  
                winModal.centerInPage();  
                winModal.addCloseClickHandler(new CloseClickHandler() {  
                    public void onCloseClick(CloseClientEvent event) {                          
                        winModal.destroy();  
                    }  
                });  
                  
                winModal.addItem(windowNuevoCliente());  
                winModal.show();
                
            }  
        });          
        
        final IButton editarButton = new IButton("Editar");  
        editarButton.setAutoFit(true);  
        editarButton.setIcon("/TP-PW-war/icons/edit.png");        
        editarButton.addClickHandler(new ClickHandler() {  
            public void onClick(ClickEvent event) {  
                
            }  
        });
        
        final IButton borrarButton = new IButton("Borrar");  
        borrarButton.setAutoFit(true);  
        borrarButton.setIcon("/TP-PW-war/icons/remove.png");        
        borrarButton.addClickHandler(new ClickHandler() {  
            public void onClick(ClickEvent event) {  
                
            }  
        });
        
          
        
        
        menuGridToolStrip = new ToolStrip();  
        menuGridToolStrip.setAlign(Alignment.LEFT);
        menuGridToolStrip.setWidth100();  
        //menuGridToolStrip.addFill();          
        menuGridToolStrip.addMember(nuevoButton);
        menuGridToolStrip.addSeparator(); 
        menuGridToolStrip.addMember(editarButton);  
        menuGridToolStrip.addSeparator();  
        menuGridToolStrip.addMember(borrarButton); 
         
        
              
        
        //menu.addMember(menuGridToolStrip); 
        this.addMember(menuGridToolStrip);
        
        //Se crea la grilla
        
         
        clientesGrid.setWidth100();  
        clientesGrid.setHeight100();  
        clientesGrid.setShowAllRecords(true); 
        
        ListGridField idClienteField = new ListGridField("idCliente", "ID", 40); 
        idClienteField.setType(ListGridFieldType.INTEGER);
        ListGridField nombresField = new ListGridField("nombres", "Nombres");  
        ListGridField apellidosField = new ListGridField("apellidos", "Apellidos");          
        ListGridField rucField = new ListGridField("ruc", "RUC");  
        ListGridField direccionField = new ListGridField("direccion", "Direccion");  
        ListGridField telefonoField = new ListGridField("telefono", "Telefono");
        ListGridField emailField = new ListGridField("email", "Email");
        
        listaCampos = new ListGridField[] {idClienteField, nombresField, apellidosField,  
                                                   rucField, direccionField, telefonoField, emailField};
        clientesGrid.setFields(listaCampos);  
        clientesGrid.setCanResizeFields(true);  
        //menu.addMember(clientesGrid);   
        this.addMember(clientesGrid);
        //menu.draw();
        
        {
            AdminRPCAsync service = GWT.create(AdminRPC.class);
            service.listarClientes(new AsyncCallback<List<ClienteDTO>>() {

                @Override
                public void onFailure(Throwable caught) {
                    //...   
                    
                }

                @Override
                public void onSuccess(List<ClienteDTO> result) {
                    int i = 0;
                    records = new GridRegistroCliente[result.size()];
                    for (ClienteDTO cliente : result) {
                        GridRegistroCliente registro = new GridRegistroCliente(cliente);
                        records[i] = registro;
                        i++;
                    }
                    clientesGrid.setData(records);
                }
            });
        }
    }    
    
    public VLayout windowNuevoCliente(){
        
        VLayout layoutNuevoCliente = new VLayout();
        final DynamicForm form = new DynamicForm();
        
        //nombres del cliente
        final TextItem nombres = new TextItem();  
        nombres.setTitle("Nombres");        
        nombres.setRequired(true);
        nombres.setRequiredMessage("Debe ingresar el Nombre");
        
        //apellidos del cliente
        final TextItem apellidos = new TextItem();  
        apellidos.setTitle("Apellidos");        
        apellidos.setRequired(true);
        apellidos.setRequiredMessage("Debe ingresar el Apellido");
        
        //ruc del cliente
        final TextItem ruc = new TextItem();  
        ruc.setTitle("RUC");        
        ruc.setRequired(true);
        ruc.setRequiredMessage("Debe ingresar el Ruc");
        
        //direccion del cliente
        final TextItem direccion = new TextItem();  
        direccion.setTitle("Direccion"); 
        
        //telefono del cliente
        final TextItem telefono = new TextItem();  
        telefono.setTitle("Telefono");        
        
        
        //email del cliente
        RegExpValidator emailValidator = new RegExpValidator();  
        emailValidator.setErrorMessage("El formato de email es invalido");
        emailValidator.setExpression("^([a-zA-Z0-9_.\\-+])+@(([a-zA-Z0-9\\-])+\\.)+[a-zA-Z0-9]{2,4}$");
        
        final TextItem email = new TextItem();  
        email.setTitle("E-mail"); 
        email.setValidators(emailValidator);
        
        form.setFields(nombres, apellidos, ruc, direccion, telefono, email);  
        layoutNuevoCliente.addMember(form); 
        
        IButton guardar = new IButton("Guardar");  
        guardar.addClickHandler(new ClickHandler() {  
            public void onClick(ClickEvent event) {  
                if(form.validate()) {  
                    
                    AdminRPCAsync service = GWT.create(AdminRPC.class);
                    ClienteDTO c = new ClienteDTO();
                    c.setNombres(nombres.getValueAsString());
                    c.setApellidos(apellidos.getValueAsString());
                    c.setRuc(ruc.getValueAsString());
                    c.setDireccion(direccion.getValueAsString());
                    c.setTelefono(telefono.getValueAsString());
                    c.setEmail(email.getValueAsString());
                    
                    
                      //ClienteDTO cli = new ClienteDTO(0,"asd","aasdasd","asdasdasd","asdasd");
                    service.createCliente(c, new AsyncCallback<Void>()
                    {
                        @Override
                        public void onFailure(Throwable caught)
                        {
                            SC.say("Ocurrio un error al guardar el Cliente");
                        }

                        @Override
                        public void onSuccess(Void result)
                        {
                            SC.say("Se ha guardado Correctamente"); 
                            
                                AdminRPCAsync service = GWT.create(AdminRPC.class);
                                service.listarClientes(new AsyncCallback<List<ClienteDTO>>() {

                                @Override
                                public void onFailure(Throwable caught) {
                                    //...   
                                      SC.say("Entro en OnFailure de traer el listado");
                                }

                                @Override
                                public void onSuccess(List<ClienteDTO> result) {
                                    int i = 0;
                                    records = new GridRegistroCliente[result.size()];
                                    for (ClienteDTO cliente : result) {
                                        GridRegistroCliente registro = new GridRegistroCliente(cliente);
                                        records[i] = registro;
                                        i++;
                                    }
                                    clientesGrid.setData(records);
                                    clientesGrid.draw();
                                    SC.say("Entro en OnSuccess de traer el listado");

                                }
                            });
                        }
                    });
                    
                    
                    winModal.destroy();
                    
                }                
            }  
        });
        layoutNuevoCliente.addMember(guardar);
        return layoutNuevoCliente;
    }
    
}
